from PIL import Image
import os


def resize_image_advanced(image_path, scale_factor, output_path=None):
    """
    高级图片缩放函数，包含错误处理和自动保存

    Args:
        image_path (str): 输入图片的路径
        scale_factor (float): 缩放比例
        output_path (str, optional): 输出图片路径，如果为None则不保存

    Returns:
        Image or None: 成功返回图片对象，失败返回None
    """
    try:
        # 检查文件是否存在
        if not os.path.exists(image_path):
            print(f"错误: 文件 '{image_path}' 不存在")
            return None

        # 检查缩放比例是否有效
        if scale_factor <= 0:
            print("错误: 缩放比例必须大于0")
            return None

        # 打开图片
        with Image.open(image_path) as img:
            # 计算新尺寸
            width, height = img.size
            new_width = int(width * scale_factor)
            new_height = int(height * scale_factor)

            # 确保最小尺寸为1像素
            new_width = max(1, new_width)
            new_height = max(1, new_height)

            # 缩放图片
            resized_img = img.resize((new_width, new_height), Image.Resampling.LANCZOS)

            # 保存图片（如果指定了输出路径）
            if output_path:
                # 确保输出目录存在
                os.makedirs(os.path.dirname(output_path), exist_ok=True)
                resized_img.save(output_path)
                print(f"图片已保存到: {output_path}")

            print(f"缩放完成: {width}x{height} -> {new_width}x{new_height} (比例: {scale_factor})")
            return resized_img

    except Exception as e:
        print(f"处理图片时发生错误: {e}")
        return None


# 使用示例
if __name__ == "__main__":
    # 示例1: 缩小图片
    result = resize_image_advanced(r"C:\Users\33720\Desktop\待修复\001.png", 0.6, r"C:\Users\33720\Desktop\待修复\0011.png")

    if result:
        result.show()  # 显示图片